package com.ahorresas.controllers;

import com.ahorresas.modelo.daos.PerfilDao;
import com.ahorresas.modelo.beans.PerfilBean;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class PerfilController extends HttpServlet {
    
    private final PerfilDao perfilDao = new PerfilDao();
    private String codigo;
    private String nombre;
    private int resultado;
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        /*Control del boton accionado desde la página JSP*/
        String accion = request.getParameter("accion");
        if(accion == null)
            accion = "";
        
        codigo = request.getParameter("codigo");
        nombre = request.getParameter("nombre");
        
        PerfilBean perfil = null;
        String validacion = "";
        resultado = 0;
        
        switch (accion) {
            case "consultar":
                validacion = obligatorios(false);
                if(validacion.length() > 0){
                    mantenerDatos(request);
                    request.setAttribute("msg", validacion);
                } else {
                    perfil = perfilDao.buscarPerfil(codigo);
                    if(perfil != null){
                        llenarCampos(request, perfil);
                        request.setAttribute("msg", "El perfil de préstamo fué encontrado con éxito");
                    }else{
                        request.setAttribute("msg", "El perfil de préstamo no pudo ser encontrado");
                    }
                }
                break;
            case "guardar":
                validacion = obligatorios(true);
                if(validacion.length() > 0){
                    mantenerDatos(request);
                    request.setAttribute("msg", validacion);
                } else {
                    perfil = perfilDao.buscarPerfil(codigo);
                    if(perfil != null){
                        perfil.setCodigo(Integer.parseInt(codigo));
                        perfil.setNombre(nombre);

                        resultado = perfilDao.modificarPerfil(perfil);
                    } else {
                        perfil = new PerfilBean();
                        perfil.setCodigo(Integer.parseInt(codigo));
                        perfil.setNombre(nombre);

                        resultado = perfilDao.crearPerfil(perfil);
                    }
                    
                    if(resultado == 1){
                        llenarCampos(request, null);
                        request.setAttribute("msg", "El estado de préstamo fué guardado con éxito.");
                    } else {
                        request.setAttribute("msg", "El estado de préstamo no pudo ser guardado.");
                    }
                }
                break;
            case "eliminar":
                validacion = obligatorios(false);
                if(validacion.length() > 0){
                    mantenerDatos(request);
                    request.setAttribute("msg", validacion);
                } else {
                    resultado = perfilDao.eliminarPerfil(Integer.parseInt(codigo));
                    if(resultado == 1){
                        llenarCampos(request, null);
                        request.setAttribute("msg", "El perfil fué eliminado con éxito");
                    } else {
                        request.setAttribute("msg", "El perfil no pudo ser eliminado.");
                    }
                }
                break;
            case "listar":
                List<PerfilBean> listaPerfiles = perfilDao.listarPerfils();
                request.setAttribute("lista", listaPerfiles);
                break;
        }
        
        request.getRequestDispatcher("./jsp/perfil.jsp").forward(request, response);
    }
    
    public String obligatorios(boolean guardado){
        StringBuilder resultado = new StringBuilder();
        if(codigo == null || codigo.equals(""))
            resultado.append("El campo 'Codigo' no debe estar vacío. <br>");
        else {
            try {
                Integer.valueOf(codigo);
            } catch (NumberFormatException e) {
                resultado.append("El campo 'Codigo' debe ser numérico. <br>");
            }
        }

        /* Si es guardado de datos valida los demás campos de lo contrario 
         * retorna la validación sobre el clave 
         */
        if(!guardado) return resultado.toString();
        if(nombre == null || nombre.equals(""))
            resultado.append("El campo 'Nombre' no debe estar vacío. <br>");
        return resultado.toString();
    }
    
    public void llenarCampos(HttpServletRequest request, PerfilBean perfil){
        request.setAttribute("codigo", perfil != null ? perfil.getCodigo(): "");
        request.setAttribute("nombre", perfil != null ? perfil.getNombre() : "");
    }
    
    public void mantenerDatos(HttpServletRequest request){
        request.setAttribute("codigo", codigo != null ? codigo : "");
        request.setAttribute("nombre", nombre != null ? nombre : "");
    }
}
